using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using EYDIngenieria.ERP.Aplicacion.Gestion;
using EYDIngenieria.ERP.Aplicacion.Mantenedores;
using EYDIngenieria.ERP.ObjetosDeNegocio.Dominio;

public partial class Gestion_Default : System.Web.UI.Page
{
    private MantenedorProducto mantenedorProducto = new MantenedorProducto();
    private MantenedorProveedor mantenedorProveedor = new MantenedorProveedor();
    private MantenedorFamiliaProducto mantenedorFamiliaProducto = new MantenedorFamiliaProducto();
    private MantenedorMedioDePago mantenedorMedioDePago = new MantenedorMedioDePago();
    private GestionFactura gestionFactura = new GestionFactura();
    private Proveedor[] proveedores;
    private MedioDePago[] mediosDePago;
    private FamiliaProducto[] familiasDeProducto;
    private Producto[] productos;

    private Factura factura = new Factura();
    protected void Page_Load(object sender, EventArgs e)
    {
       
        if(!IsPostBack)
        {
            Session.Add("factura",factura);
            dtlDetalleFactura.DataSource = factura.Detalle;
            dtlDetalleFactura.DataBind();
            ddlProveedor.DataTextField = "RazonSocial";
            ddlProveedor.DataValueField = "Id";
            proveedores = mantenedorProveedor.Listar();
            ddlProveedor.DataSource = proveedores;
            ddlProveedor.DataBind();

            ddlMedioDePago.DataTextField = "Nombre";
            ddlMedioDePago.DataValueField = "Id";
            mediosDePago = mantenedorMedioDePago.Listar();
            ddlMedioDePago.DataSource = mediosDePago;
            ddlMedioDePago.DataBind();

            ddlFamilia.DataTextField = "Nombre";
            ddlFamilia.DataValueField = "Id";
            familiasDeProducto = mantenedorFamiliaProducto.Listar();
            familiasDeProducto = familiasDeProducto;
            ddlFamilia.DataSource = familiasDeProducto;
            ddlFamilia.DataBind();

            ddlProducto.DataTextField = "Nombre";
            ddlProducto.DataValueField = "Id";
            ddlProducto.DataSource = productos;
            ddlProducto.DataBind();

            txbFecha.Text = DateTime.Now.ToShortDateString();
        }
    }

    protected void ddlFamilia_SelectedIndexChanged(object sender, EventArgs e)
    {
        FamiliaProducto f = new FamiliaProducto();
        f.Id = Int16.Parse(((DropDownList) sender).SelectedValue);
        productos = mantenedorProducto.Listar(f);
        ddlProducto.DataSource = productos;
        ddlProducto.DataBind();
    }
    protected void btnAgregar_Click(object sender, EventArgs e)
    {

        DetalleFactura detalle = new DetalleFactura();
        int idProducto = Int16.Parse(ddlProducto.SelectedValue);
        Producto p =  mantenedorProducto.Obtener(idProducto);
        detalle.Producto = p;
        detalle.ValorUnitario = long.Parse(txbValorUnitario.Text);
        detalle.Cantidad = long.Parse(txbCantidad.Text);
        Factura f = ((Factura) Session["factura"]);
        f.Detalle.Add(detalle);
        dtlDetalleFactura.DataSource = f.Detalle;
        dtlDetalleFactura.DataBind();
        f.MontoTotal = 0;
        
        foreach (DetalleFactura d in f.Detalle)
        {

            f.MontoTotal =  f.MontoTotal+ d.ValorTotal ;
        }
        
        lblMontoTotal.Text = f.MontoTotal.ToString("0,000.00");
        long neto = long.Parse(Math.Round(f.MontoTotal/1.19).ToString());
        lblMontoNeto.Text = neto.ToString("0,000.00");
        long iva = (neto * 19) / 100;
        lblIva.Text = iva.ToString("0,000.00");

        txbCantidad.Text = string.Empty;
        txbValorUnitario.Text = string.Empty;
    }
    protected void botonAceptar_Click(object sender, EventArgs e)
    {
        Factura f = ((Factura)Session["factura"]);
        f.Fecha = DateTime.Now;
        Proveedor proveedor = mantenedorProveedor.Obtener(Int16.Parse(ddlProveedor.SelectedValue));
        MedioDePago medioDePago = mantenedorMedioDePago.Obtener(int.Parse(ddlMedioDePago.SelectedValue));
        f.MedioDePego = medioDePago;
        f.Proveedor = proveedor;
        f.NumeroFactura = int.Parse(txbMumero.Text);
        gestionFactura.GuardarFactura(f);
        dtlDetalleFactura.DataSource = null;
        dtlDetalleFactura.DataBind();

        txbMumero.Text = string.Empty;
        lblIva.Text = "0";
        lblMontoNeto.Text = "0";
        lblMontoTotal.Text = "0";

    }
    protected void btnBorrar_Click(object sender, EventArgs e)
    {

        Factura f = ((Factura)Session["factura"]);
        int id = int.Parse(((System.Web.UI.WebControls.Button)(sender)).CommandArgument);
        foreach (DetalleFactura detalle in f.Detalle)
        {
            if (detalle.Producto.Id == id)
            {
                f.Detalle.Remove(detalle);
                dtlDetalleFactura.DataSource = f.Detalle;
                dtlDetalleFactura.DataBind();
                Session["factura"] = f;
                return;
                
            }            
        }
    }
}
